package com.atguigu.factory;

import com.atguigu.bean.Book;
import org.springframework.beans.factory.FactoryBean;

import java.util.UUID;

/**
 * 实现了FactoryBean接口的类是Spring可以认识的工厂类
 * Spring会自动的调用工厂方法创建
 *
 * 1）、实现FactoryBean接口，接口的泛型<T>，填入要创建的类
 * 2）、实现方法
 *
 * @author 伟哥
 * @date 2021-04-29 9:03
 */
public class MyFactoryBeanImpl implements FactoryBean<Book> {
    /**
     * getObject：工厂方法；
     * @return 返回创建的对象
     * @throws Exception 继承的接口抛出异常，这里也要抛出异常
     */
    @Override
    public Book getObject() throws Exception {
        System.out.println("MyFactoryBeanImpl创建对象...");
        Book book = new Book();
        book.setBookName(UUID.randomUUID().toString());
        return book;
    }

    /**
     * Spring会自动调用这个方法，来确认创建的对象是什么类型
     * @return 返回我们创建对象的类型
     *
     */
    @Override
    public Class<?> getObjectType() {
        return Book.class;
    }

    /**
     * isSingleton：是单例？
     * @return false 多例模式
     *         true 单例模式
     */
    @Override
    public boolean isSingleton() {
        return false;
    }
}
